import Vue from 'vue'
import VueRouter from 'vue-router'

import store from '@/store'

import routes from './routes'
Vue.use(VueRouter)



const router = new VueRouter({
  mode: 'hash',
  base: process.env.BASE_URL,
  routes
})


// 问题
// 先登录(存储了role,checkedkeys) 在进行路由切换 => role,checkedkeys没问题
// 刷新页面 => (App.vue做了处理, 等组件挂载完毕 同步localStorage到vuex) ->问题是 -> 全局路由守卫先触发(此时组件还没挂载 -> role,checkedkeys 还没有 => 跳404)

let whiteList = ["/", "/login", "/404"];

router.beforeEach((to, from, next) => {
  console.log("to", to);
  console.log("from", from);
  console.log("全局路由守卫1111111");

  // 监听刷新操作  -> 重新挂载数据  (可以被人卡bug -> 修改本地数据来提升权限 -> 后台接收请求之后先要验证权限等级(数据库做对比))
  if (from.name == null && from.path == "/") {
    console.log("你刷新了");
    store.dispatch("getAuthorityInfo");
  }
  // next();

  // if(from.name==null && from.path == "/"){  // 监听刷新操作
  //   console.log(console.log("你刷新了"));
  //   if (!whiteList.includes(to.path)) { // 非白名单  -> 刷新之后去登录
  //     next({path:"/login",query:{ReturnUrl:router.currentRoute.fullPath}});
  //   }else{
  //     next();
  //   }
  // }else{  // 不是刷新  -> 继续
  //   next();  
  // }

  let { isLogin } = store.getters;
  if (!whiteList.includes(to.path)) { // 非白名单  -> 验证用户是否登录(刷新之后如果不做处理 用户isLogin肯定是获取不到的  -> 去登录)
    if (!isLogin) { // 没有登录
      next({ path: "/login", query: { ReturnUrl: router.currentRoute.fullPath } });
    } else {
      next();
    }
  } else {
    next();
  }

})


// 全局路由守卫  -> 每次页面跳转之前 -> 判断是否是用户能访问的
router.beforeEach((to, from, next) => {
  console.log("全局路由守卫2222222");
  let { role, checkedkeys } = store.state;
  console.log("role", role);
  console.log("checkedkeys", checkedkeys);

  if (!whiteList.includes(to.path)) { // 非白名单

    // role   => 登录的时候有的 -> 存vuex中
    // checkedkeys  => 登录的时候有的 -> 存vuex中

    if (role == 1) { // 超级管理员
      next();
    } else if (role == 2 || role == 3) {
      if (checkedkeys.includes(to.path)) {  // 是用户能访问的
        next()
      } else {
        next("/404");  
      }
    } else {
      next("/404");
    }


  } else { //白名单
    next();
  }

})


export default router
